
#include "./service-agent-impl.h"

namespace fasmio { namespace container {

ServiceAgentImpl::ServiceAgentImpl(ILogger* logger, const char* name) :
    logger_(logger),
    name_(name),
    mlogger_(logger, name),
    service_(nullptr),
    state_(service::BORNING)
{
}

ServiceAgentImpl::~ServiceAgentImpl()
{
}

bool ServiceAgentImpl::Attach(service::IService *service)
{
    if (service_ != nullptr)
        return false;

    service_ = service;
    return true;
}

service::IService* ServiceAgentImpl::Detach()
{
    service::IService *service = service_;
    service_ = nullptr;
    return service;
}

bool ServiceAgentImpl::Initialize()
{
    // TODO: ServiceAgentImpl::Initialize
    return false;
}

void ServiceAgentImpl::Finalize()
{
    // TODO: ServiceAgentImpl::Finalize
}

service::ServiceState ServiceAgentImpl::GetServiceState()
{
    return state_;
}

bool ServiceAgentImpl::RegisterPushSlot(const char* name, service::TaskAllocator alloc, service::PushSlotHandler handler, unsigned concurrency)
{
    // TODO: ServiceAgentImpl::RegisterPushSlot
    return false;
}

bool ServiceAgentImpl::RegisterPopSlot(const char* name, service::IOutQueue **queue)
{
    // TODO: ServiceAgentImpl::RegisterPopSlot
    return false;
}

bool ServiceAgentImpl::RegisterQuerySlot(const char* name, service::QuerySlotHandler handler)
{
    // TODO: ServiceAgentImpl::RegisterQuerySlot
    return false;
}

bool ServiceAgentImpl::RegisterUpdateSlot(const char* name, service::TaskAllocator alloc, service::UpdateSlotHandler handler)
{
    // TODO: ServiceAgentImpl::RegisterUpdateSlot
    return false;
}

bool ServiceAgentImpl::RegisterDeleteSlot(const char* name, service::DeleteSlotHandler handler)
{
    // TODO: ServiceAgentImpl::RegisterDeleteSlot
    return false;
}

bool ServiceAgentImpl::ServiceConfiguring()
{
    // TODO: ServiceAgentImpl::ServiceConfiguring
    return false;
}

bool ServiceAgentImpl::ServiceConfigured()
{
    // TODO: ServiceAgentImpl::ServiceConfigured
    return false;
}

bool ServiceAgentImpl::ServiceError()
{
    // TODO: ServiceAgentImpl::ServiceError
    return false;
}

unsigned long ServiceAgentImpl::GetInQueueSize()
{
    // TODO: ServiceAgentImpl::GetInQueueSize
    return 0;
}

unsigned long ServiceAgentImpl::GetInQueueDoingCount()
{
    // TODO: ServiceAgentImpl::GetInQueueDoingCount
    return 0;
}

unsigned long ServiceAgentImpl::GetInQueueTraffic()
{
    // TODO: ServiceAgentImpl::GetInQueueTraffic
    return 0;
}

unsigned long ServiceAgentImpl::GetOutQueueSize()
{
    // TODO: ServiceAgentImpl::GetOutQueueSize
    return 0;
}

unsigned long ServiceAgentImpl::GetOutQueueDoingCount()
{
    // TODO: ServiceAgentImpl::GetOutQueueDoingCount
    return 0;
}

unsigned long ServiceAgentImpl::GetOutQueueTraffic()
{
    // TODO: ServiceAgentImpl::GetOutQueueTraffic
    return 0;
}

}}  // namespace fasmio::container

